#include <bits/stdc++.h>

// 思路：
// 1.变量意义：n为需要分解的数，pos用于控制要填写数据的位置。result数组用于保存最后的结果
// 2.search(int k) 中的k用于传递需要分解的数
// 3.search(n) 对n进行搜索，从1开始搜索，如果满足当前的数字大于等于前一个数字，则将结果保存
// 4.pos增加，search(n-1)继续搜索接下来的数据
// 5.最后让pos--用于进行回溯操作。

// 结束条件为：
// 1.当k的值小于0时，说明所填写的数字不多，进行回溯
// 2.当k==0时，说明已经分解完毕，则进行输出操作

using namespace std;

int n,pos = 1;
int result[100];
void search(int k) {
    if (k < 0)
        return;
    if (k == 0) {
        cout << n << "=";
        int first = true;
        for(int i = 1;i < pos;i++) {
            if (first)cout << result[i];
            else cout << "+" << result[i];
            first = false;
        }
        cout << endl;
        return;
    }
    for(int i = 1;i < n;i++) {
        if(i>= result[pos-1]) {
            result[pos] = i;
            pos++;
            search(k - i);
            pos--;
        }

    }
}

int main() {
    cin >> n;
    search(n);
}